Software is generally sold as a right to use. In other words, the use of the software is marketed and sold but not the software itself. It is important to protect the software itself from intentional, as well as inadvertent copying. Simple lock/unlock protection does not offer adequate flexibility for the user or the owner of the software. It would be useful to offer a range of control, including a very fine level of control, of the action and operation of a specific functionality within a software program.
Encryption of software programs offers a means to hide or shield important proprietary intellectual property (i.e., the software) from those who may wish to abuse the license terms and copy the software or a portion thereof. A substantial problem for software publishers and legitimate resellers is piracy of software programs. Piracy can occur in a number of forms such as the unlocking of protected software for illegal copying and retail sale, as well as the installation of unlocked software onto more computers than permitted under the software license agreement. A need exists for an encryption/decryption system for software programs to restrict the use of unlocked software to the situations intended by the software publisher.
Existing encryption systems and methodologies commonly employ encryption of one or more executable files in order to block the installation or stop the unlicensed execution of the software. Standard encryption methodologies commonly entail ‘wrapping’ the entire set of executable programs or files. These encrypted programs must then be unencrypted or unwrapped in order to be executed on the user's computer. Such unwrapping has a number of disadvantages. Once the program is unwrapped, it may be vulnerable to copying. In addition, the unwrapping process can require a substantial amount of free memory or disk space (e.g., on the order of two to three times the memory needed for the actual program) during the decryption process. The vulnerability of an unwrapped program to copying is addressed in commonly-assigned U.S. Pat. No. 6,223,288 whereby the executable file is persistently locked to a user's hardware through a hardware hash mechanism. U.S. Pat. No. 6,223,288 is hereby incorporated in its entirety herein for all purposes.
Another common locking process involves embedding license checks within the software executable(s) themselves through an Application Programming Interface or API which is commonly part of an activation-based system. While this process has the advantage of not requiring substantial memory or disk storage for decryption, pirates using standard software debugging tools commonly break the protection. The actual lock is not broken through this process, but the protection can often be removed through patches that overwrite or circumvent the license checks. With this technique, increased protection and effectiveness can be achieved through increased complexity in the nature and integration of the license validation checks. This increased complexity, however, may have the undesirable effect of increasing the initial protection setup investment, as well as the routine maintenance and quality assurance efforts for the developers of the software product.
Software executables represent one of three forms of digital content. These three content forms are:                1. Executable Content—data that consists of machine instructions that are directly processed by the target hardware; it is usually stored in the form of individual files (e.g., common software applications).        2. Viewable Content—data that can only be viewed (or played) by programs that understand the particular data format and are able to correctly interpret it; it is typically stored either as individual files or as data elements within an application or a database (e.g., music, pictures, video, written works).        3. Usable Content—data that belongs to and is processed by a particular application; it is often stored as data elements within the application, also as files or as elements within a database (e.g., tax tables, algorithmic control parameters). This data may be proprietary, or not, and it arranged in a manner such that it is usable by a software program.        
Existing licensing systems are primarily directed at the first form of content described above to prohibit copying of, or operation of, executable software code. There are a number of systems that address viewable content, the second content form described above. A need exists for a content protection system that is primarily applicable to the third form of content described above, that is, usable content, and that impacts the interaction between the first and third forms of content (i.e., the use of static data with executable programs).
Further, a need also exists for a content protection system that can be adapted to support all three content forms since all forms of content may be used interchangeably. For viewable content such as digital pictures to be viewed with executable applications such as content players, a need exists for a content protection system that allows such content to be used, modified or stored according to algorithmic parameters that are themselves maintained as usable content. For example, it would be beneficial to have protected data elements that are required by algorithms controlling digital sound reproduction. Similarly, an executable program that works in conjunction with independent data such as fonts, virus files, and so on, could also benefit from maintaining this data in a protected form. A need exists for a content protection system that can provide basic functionality with an entry level product, as well as increasing functionality through decryption of the data required for that functionality. For data elements representing algorithmic variables, a need exists for a content protection system that provides programmatic execution control ranging from very coarse control (e.g., as an overall gate or switch on the primary program) to very fine control of a specific function such that, by selectively encrypting parameters for just one or two algorithms, very specific functions can be disabled or controlled through a limited or extensive range.